<?php

//构建命名空间（全局空间下的 --》 core空间）
namespace core;

class Model{

    private $type;//数据库类型
    private $host;//IP地址
    private $port;//端口号
    private $charset;//字符集
    private $db;//数据库名
    private $user;//数据库帐号
    private $pwd;//数据库密码

    protected  $_pdo;//PDO对象
    protected $_pdoStatement;//pdoStatement对象

    public function __construct($type='', $host='', $port='', $charset='', $db='', $user='', $pwd=''){ 
        
        //初始化参数
        $this->type = empty($type) ? C('pdo.type') : $type;
        $this->host = empty($host) ? C('pdo.host') : $host;
        $this->port = empty($port) ? C('pdo.port') : $port;
        $this->charset = empty($charset) ? C('pdo.charset') : $charset;
        $this->db = empty($db) ? C('pdo.db') : $db;

        $this->user = empty($user) ? C('pdo.user') : $user;
        $this->pwd = empty($pwd) ? C('pdo.pwd') : $pwd;

        //实例化一个PDO类的对象
        $dsn = "{$this->type}:host={$this->host};port={$this->port};charset={$this->charset};dbname={$this->db}";
        $this->_pdo = new \PDO($dsn, $this->user, $this->pwd);

        //设置错误处理模式为异常模式
        $this->_pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    }
    /**
     *  输出错误信息的方法
     * @param  $e  obj     捕获的异常对象
     */
    public function outputERR($e){ 
        echo '错误信息为：' . $e->getMessage(); echo '<br/>';
        echo '错误码为：' . $e->getCode(); echo '<br/>';
        echo '错误行号为：' . $e->getLine(); echo '<br/>';
        echo '错误文件为：' . $e->getFile();
        exit;
    }
    /**
     *  输出成功提示信息的方法
     * @param  $e  obj     捕获的异常对象
     */
    public function outputSUC($msg='操作成功！'){ 
        echo $msg; echo '<br/>';
    }

    /**
     * 查询一条数据
     * @param  $cols  string  需要查询的字段
     * @param  $tb  string  需要查询的表名
     * @param  $condition  string  查询的条件
     */
    public function getRow($cols, $tb, $condition){ 
        
        try{//监听
            $sql = "select $cols from $tb where $condition limit 1";//注意查询一条最好给上limit 1
            $this->_pdoStatement = $this->_pdo->query($sql);
        }catch(\PDOException $e){//捕获
            $this->outputERR($e);//调用错误输出方法输出错误
        }
        return $this->_pdoStatement->fetch(\PDO::FETCH_ASSOC);
    }


    /**
     * 查询多条数据
     * @param  $cols  string  需要查询的字段
     * @param  $tb  string  需要查询的表名
     * @param  $condition  string  查询的条件
     */
    public function getRows($cols, $tb, $condition){ 
        
        try{//监听
            $sql = "select $cols from $tb where $condition";
            $this->_pdoStatement = $this->_pdo->query($sql);
        }catch(\PDOException $e){//捕获
            $this->outputERR($e);//调用错误输出方法输出错误
        }
        return $this->_pdoStatement->fetchAll();
    }
    /**
     * 分页功能 数据查询
     */




    /**
     * 新增数据
     * @param  $tb  string  需要插入数据的表名
     * @param  $vals  string  新增的数据，例如：$vals = 'null, "tttt100", "iiiii100", "cccc100", 12345';
     */
    public function ad($tb, $vals){ 
        
        try{//监听
            $sql = "insert into $tb values ($vals)";
            $this->_pdo->exec($sql);//执行新增SQL语句
            //$this->outputSUC('新增数据成功！');//调用输出操作成功信息方法
            return true;
        }catch(\PDOException $e){//捕获

            $this->outputERR($e);//调用错误输出方法输出错误
        }
    }

    /**
     * 修改数据
     * @param  $tb  string  需要更新数据的表名
     * @param  $k_vals  string  更新的数据对应的键和值，例如：$k_vals = 'title="aaaa10", intro="iiiabc"';
     */
    public function upd($tb, $k_vals, $condition){ 
        
        try{//监听
            $sql = "update $tb set $k_vals where $condition";
            $this->_pdo->exec($sql);//执行修改SQL语句
            //$this->outputSUC('修改数据成功！');//调用输出操作成功信息方法
            return true;
        }catch(\PDOException $e){//捕获

            $this->outputERR($e);//调用错误输出方法输出错误
        }
    }

    /**
     * 删除数据
     * @param  $tb  string  需要删除数据的表名
     * @param  $condition  string  删除条件，例如：$condition = 'id<64';
     */
    public function del($tb, $condition){ 
        
        try{//监听
            $sql = "delete from $tb where $condition";
            $this->_pdo->exec($sql);//执行删除SQL语句
            //$this->outputSUC();//调用输出操作成功信息方法
            return true;
        }catch(\PDOException $e){//捕获

            $this->outputERR($e);//调用错误输出方法输出错误
        }
    }
}
$a=new Model;
// $a->page();
